package main

import (
	"fmt"
	"os"

	"gopkg.in/ini.v1"
)

/*
1.load ini file
2.read line for ini file
3. 判断 每个 块的 对应的 struct
4.取出struct 对应的值



*/

type Mysqlconfig struct {
	Address  string `ini:"address"`
	Port     int    `ini:"port"`
	Username string `ini:"username"`
	Password string `ini:"password"`
}
type Redisconfig struct {
	Address  string `ini:"address"`
	Port     int    `ini:"port"`
	Username string `ini:"username"`
	Password string `ini:"password"`
	Fork     bool   `ini:"fork"`
}
type Sections struct {
	Mysqlconfig `ini:"mysql"`
	Redisconfig `ini:"redis"`
}

// func Loadini(config string, data interface{}) (err error) {
// 	// _ := reflect.ValueOf(data)
// 	t := reflect.TypeOf(data)
// 	for i := 0; i < t.Elem().NumField(); i++ {
// 		field := t.Elem().Field(i)
// 		for name := range field.Tag.Get("ini") {

// 		}
// 		file, err := ioutil.ReadFile(config)
// 		if err != nil {
// 			err := errors.New("load ini file error")
// 			return err
// 		}
// 		// 2.read line for ini file
// 		lines := strings.Split(string(file), "\n")
// 		for lineIndex, xline := range lines {
// 			line := strings.TrimSpace(xline)
// 			if strings.HasPrefix(line, ";") || strings.HasPrefix(line, "#") {
// 				continue
// 			}
// 			if strings.HasPrefix(line, "[") {

// 				if !strings.HasSuffix(line, "]") || len(strings.TrimSpace(line[1:len(line)-1])) == 0 {

// 					errx := fmt.Errorf("[the line:%d syntax error]", lineIndex+1)
// 					// fmt.Printf("the line : %d yntax error", lineIndex+1)
// 					panic(errx)
// 				}
// 				if strings.TrimSpace(strings.Trim(line, "[]")) == "mysql" {

// 				}
// 			}

// 		}

// 	}
// 	return nil
// }
func main() {
	cfg, err := ini.Load("./config.ini")
	if err != nil {
		fmt.Printf("Fail to read file: %v", err)
		os.Exit(1)
	}
	fmt.Println(cfg.Section("mysql").Key("address").String())

}
